package tp.igl.View;


import javafx.scene.control.TextField;
import tp.igl.Segment;
import tp.igl.Controler.SegmentControler;

/**
 *<b>
 * SegmentField est la class représentant un champ pour récuperer un Octet de l'adresse.
 * </b>
 * <p>
 * Il n'accepte que les valeur numérique entre 0 et 255
 * </p>
 * @author Redouane
 * @see SegmentControler
 * @see Segment
 */
public class SegmentField extends TextField {
    
    /**
     * La valeur de segement.
     */
    private Segment seg;
    

    /**
     *Constructeur SegmentField.
     * <p>
     *  A la construction la valeur de l'octet est initialisé avec la valeur 
     * envoyée en parametre, et ajoute un controleur pour ce segement.
     * </p>
     * @param seg Le Segement qui va recevoir les valeurs lu.
     * @see Segment
     */
    public SegmentField(Segment seg) {
        super(new Integer(seg.getValeur()).toString());
        setStyle("-fx-border-style:solid; -fx-border-color:#95a5a6; -fx-border-width: 0.6px; -fx-background-color:white;");
        this.seg=seg;
        SegmentControler controler=new SegmentControler(this);
        this.setOnAction(controler);
        this.focusedProperty().addListener(controler);
        
    }

    /**
     *Retourne le segment lu.
     * @return Le segment lu
     */
    public Segment getSegment() {
         return seg;
    }

    /**
     * Met a jour le segement.
     * @param seg
     */
    public void setSegment(Segment seg) {
        this.seg.setValeur(seg.getValeur());
        this.setText(((Integer)seg.getValeur()).toString());
    }
    
    /**
     * Remplace la chaine de caracteres séléctioné par la chaine envoyée en paramètre.
     * @param string La chaine de caracters qui remplacera la seléction.
     */
    @Override
    public void replaceSelection(String string) {
        if(string.matches("[0-9]") || string.length()==0)
        super.replaceSelection(string);
    }

    /**
     * Remplace une sous chaine de caratere , pa un autre fournie en paramemtre.
     * @param i le premier caractere remplacé.
     * @param i1 le dernier caractere remplacé.
     * @param string La chaine remplaçante.
     */
    @Override
    public void replaceText(int i, int i1, String string) {
            if(string.matches("[0-9]") || ((i!=i1) && string.matches("[0-9]") || string.length()==0))
            super.replaceText(i, i1, string);
    }
}
